java从内部类访问扩展类的方法
public class ABC extends XYZ
{
public static class InnerClass1
{
...
}
public static class InnerClass2
{
...
}
public static class InnerClass3
{
...
}
public static class InnerClass4
{
...
}
}
在上面的代码中,我无法访问内部类1、2、3和4中的类XYZ的方法。如何修改上述结构,以便内部类可以访问类XYZ中的方法
提前谢谢
# 1 楼答案
静态内部类只能访问外部类的静态成员
因此内部类只能使用xyz的静态成员
如果想访问所有内容,请创建非静态的内部类
# 2 楼答案
您有两个选项,一个是删除静态调用,以便内部类实例可以使用对外部类的隐藏this引用,另一个是在显式this中创建内部类过程的实例时,例如:
# 3 楼答案
InnerClass1
不是内部类。由于单词^{如果没有
static
,它将是一个内部类。该内部类的任何实例都会有一个对ABC
(也是XYZ
)的隐藏引用。如果内部类调用了ABC
或XYZ
的任何实例方法,或引用了这些类中的任何实例变量,它将使用该隐藏引用调用实例方法或访问实例变量不过,由于它是一个嵌套类,所以没有对
ABC
(或XYZ
)的隐藏引用。因此,如果调用一个实例方法或引用一个实例变量,它就不能这样做,因为没有ABC
对象可以使用。(但是,您仍然可以调用ABC
的静态方法,或者引用静态变量。)我不确定解决方案是什么,这取决于你的需要。无法调用的
XYZ
方法可能实际上不需要XYZ
对象来处理,因此这些方法应该是静态的。嵌套类也可能有一些显式的ABC
或XYZ
变量,用于访问实例方法;如果有对象要处理,仍然可以从嵌套类调用实例方法:另一种解决方案是删除单词
static
,这样InnerClass1
就真的有一个对ABC
的隐藏引用。这意味着,当创建InnerClass1
实例时,需要一些ABC
对象供其引用。如果您在其他类中创建这个,语法将类似于